package com.boss.salary.service;

import com.alibaba.fastjson.JSONObject;
import com.boss.common.entity.PageDTO;
import com.boss.framework.dto.PaginationDTO;
import com.boss.salary.entity.SalaryBankPayBack;

import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;

public interface ISalaryBankPayBackService {

    /**
     * 获取银行支付回盘表失败的数据分页
     * @param paginationDTO
     * @param queryParam
     * @return
     */
    PageDTO<SalaryBankPayBack> querySalaryBankPayBackPage(PaginationDTO paginationDTO, Map<String, Object> queryParam, List<String> childrenId);

    /**
     * 修改银行支付回盘表信息
     * @param salaryBankPayBack
     */
    void updateSalryBankPayBack(SalaryBankPayBack salaryBankPayBack);

    /**
     * 分发到单位
     */
    void sendCardNoToAgency(List<String> agencyIds);

    /**
     * 重新下发
     * @param agencyIds
     */
    String cancelSendCard(List<String> agencyIds);

    /**
     * 获取银行支付回盘表失败并且已分发的数据分页
     * @param paginationDTO
     * @param queryParam
     * @return
     */
    PageDTO<SalaryBankPayBack> querySalaryBankPayBackSendPage(PaginationDTO paginationDTO, Map<String, Object> queryParam);

    /**
     * 修改账户信息
     * @param salaryBankPayBack
     */
    void updateBankInfo(SalaryBankPayBack salaryBankPayBack);

    /**
     * 单位撤销修改
     * @param list
     */
    void revokeUpdate(List<SalaryBankPayBack> list);

    /**
     * 单位审核通过
     */
    String verifyPass(SalaryBankPayBack salaryBankPayBack);

    /**
     * 单位撤销审核
     * @param salaryBankPayBack
     */
    String revokeVerify(SalaryBankPayBack salaryBankPayBack);

    /**
     * 送财政审核
     * @param salaryBankPayBack
     */
    String sendVerifyFinance(SalaryBankPayBack salaryBankPayBack);

    /**
     * 撤销送审
     * @param salaryBankPayBack
     */
    String revokeVerifyFinance(SalaryBankPayBack salaryBankPayBack);

    /**
     * 获取财政审核卡号数据分页
     * @param paginationDTO
     * @param queryParam
     * @return
     */
    PageDTO<SalaryBankPayBack> queryFinanceVerifyPage(PaginationDTO paginationDTO, Map<String, Object> queryParam,List<String> childrenId);

    /**
     * 财政审核卡号 财政确认
     * @param salaryBankPayBack
     */
    String financeVerifyConfirm(List<SalaryBankPayBack> salaryBankPayBack);

    /**
     * 财政审核卡号 财政退回
     * @param salaryBankPayBack
     */
    String financeVerifySendBack(List<SalaryBankPayBack> salaryBankPayBack);

    /**
     * 财政审核卡号 取消确认
     * @param salaryBankPayBack
     * @return
     */
    String financeVerifyCancelConfirm(List<SalaryBankPayBack> salaryBankPayBack);

    /**
     *财政审核卡号 审核通过
     * @param salaryBankPayBack
     * @return
     */
    String financeVerifyAuditPass(List<SalaryBankPayBack> salaryBankPayBack);

    /**
     * 财政审核卡号 撤销审核
     * @param salaryBankPayBack
     * @return
     */
    String financeVerifyUndoAudit(List<SalaryBankPayBack> salaryBankPayBack);

    /**
     * 卡号财政处理 分页查询所有
     * @param paginationDTO
     * @param queryParam
     * @return
     */
    PageDTO<SalaryBankPayBack> queryCardNumberFiscalPage(PaginationDTO paginationDTO, Map<String, Object> queryParam, List<String> childrenId);

    /**
     * 修改人员信息
     * @param     queryParam
     * @return
     */
    void updatePersonnelCardNumberFiscal();

    /**
     * 撤销修改人员信息
     * @return
     */
    void undoUpdatePersonnelCardNumberFiscal();

    /**
     * 生成银行数据（根据agencyId）
     * @param province
     */
    void generateBankData(String province,List<String> agencyIds);

    /**
     * 生成异常卡号人员工资数据文件
     * @returnagencyIds
     */
    JSONObject generateBankPayBackFile(List<String> personIds, String province);

    /**
     * 生成并导出银行数据
     * @param province
     */
    void generateAndExportBankData(String province, OutputStream outputStream) throws IOException;



}
